

package com.zdkj.subway.rca.mapper;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zdkj.subway.rca.entity.CodeName;
import com.zdkj.subway.rca.entity.SwCkBankCashPaymentNote;
import com.zdkj.subway.rca.entity.SwStReportqueryStationincome;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 银行现金缴款单
 *
 * @author cooze
 * @date 2020-10-18 17:26:59
 */
@Mapper
public interface SwCkBankCashPaymentNoteMapper extends BaseMapper<SwCkBankCashPaymentNote> {

    /**
     * 获取所有的地铁线路
     *
     * @param dataType 数据类型：1-银行单据数据（短周期）、2-长周期结算（长周期） (备注：为空时则查出所有 )
     * @return 出参
     */
    List<CodeName> listAllSubWayLine(@Param("dataType") String dataType);

    /**
     * 查询底提线路下的所有站点
     *
     * @param lineCode 地铁线路
     * @param dataType 数据类型：1-银行单据数据（短周期）、2-长周期结算（长周期） (备注：为空时则查出所有 )
     * @return 出参
     */
    List<CodeName> listSubWayStationByLineCode(@Param("lineCode") String lineCode, @Param("dataType") String dataType);

    /**
     * 银行单据数据（ 短周期） 补卸载金额
     * 数据类型是银行单据数据（非长周期），根据交易日期与钱箱未卸载库表 SW_ST_INPUT_CASHBOX_UNINSTALLED 查找入账日期等于交易日期，
     * 且是该线路和站点的所有卸载金额（UNINSTALL_AMOUNT）
     *
     * @param lineCode
     * @param stationCode
     * @return
     */
    SwCkBankCashPaymentNote getSupUnloadAmount(@Param("startDate") LocalDate startDate,
                                               @Param("endDate") LocalDate endDate,
                                               @Param("lineCode") String lineCode,
                                               @Param("stationCode") String stationCode);

    /**
     * 补短款金额（分）
     * 数据类型如果是银行单据数据（非长周期），根据交易日期，查找车站补款记录中，补款入账日期的该线路和站点补款金额之和。
     *
     * @param startDate
     * @param endDate
     * @param lineCode
     * @param stationCode
     * @return
     */
    SwCkBankCashPaymentNote getSupShortAmount(@Param("startDate") LocalDate startDate,
                                              @Param("endDate") LocalDate endDate,
                                              @Param("lineCode") String lineCode,
                                              @Param("stationCode") String stationCode);


    /**
     * 计算结算天数
     *
     * @param lineCode    线路编码
     * @param stationCode 站点编码
     * @return
     */
    Integer getBalanceDate(@Param("lineCode") String lineCode,
                           @Param("stationCode") String stationCode);

    List<Map<String,Object>> getSwStReportqueryStationincomeList(@Param("startDate")String startDate,
                                                  @Param("endDate")String endDate);

    IPage<SwCkBankCashPaymentNote> getSwCkBankCashPaymentNote(IPage page, @Param("lineCode")String lineCode,
                                                              @Param("stationCode")String stationCode,
                                                              @Param("startDate")String startDate,
                                                              @Param("endDate")String endDate,
                                                              @Param("tradeTime")String tradeTime,
                                                              @Param("executeStatus")String executeStatus,
		                                                      @Param("diffCondition")String diffCondition);

    @SqlParser(filter = true)
    boolean updateExecuteStatus(@Param("startDate")LocalDate startDate,
                                @Param("endDate")LocalDate endDate);

	Map<String,Object> getEntryTime(@Param("lineCode") String lineCode,@Param("stationCode") String stationCode,@Param("tradeTime") String tradeTime);
}
